package com.shortLinked.admin.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shortLinked.admin.common.biz.user.UserContext;
import com.shortLinked.admin.common.convention.exception.ServiceException;
import com.shortLinked.admin.common.convention.result.Result;
import com.shortLinked.admin.dao.entity.GroupDO;
import com.shortLinked.admin.dao.mapper.GroupMapper;
import com.shortLinked.admin.remote.ShortLinkActualRemoteService;
import com.shortLinked.admin.remote.dto.req.ShortLinkRecycleBinPageReqDTO;
import com.shortLinked.admin.remote.dto.resp.ShortLinkPageRespDTO;
import com.shortLinked.admin.service.RecycleService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.shortLinked.admin.common.biz.user.ColoredOutput.RED;
import static com.shortLinked.admin.common.biz.user.ColoredOutput.RESET;

/**
 * 回收站短链接接口实现层
 */
@Service
@RequiredArgsConstructor
public class RecycleServiceImpl implements RecycleService {

    private final ShortLinkActualRemoteService shortLinkActualRemoteService;

    private final GroupMapper groupMapper;

    @Override
    public Result<Page<ShortLinkPageRespDTO>> pageRecycleBinShortlink(ShortLinkRecycleBinPageReqDTO requestParam) {
        //进入回收站触发
        System.out.println(RED+"这里是:pageRecycleBinShortlink");
        LambdaQueryWrapper<GroupDO> queryWrapper = Wrappers.lambdaQuery(GroupDO.class)
                .eq(GroupDO::getUsername, UserContext.getUsername())
                .eq(GroupDO::getDelFlag, 0);
        //分组的删除标志（delFlag == 0，表示没有被删除）
        // 先查询当前用户的短链接分组信息，再根据用户下面的分组信息，进一步查询出每个分组下面共有多少回收站的短链接
        List<GroupDO> groupDOList = groupMapper.selectList(queryWrapper);
        //数据库中执行查找操作，查询出用户的短链接分组信息。
//        groupDOList 是一个 List<GroupDO> 类型的集合，它包含了当前用户的短链接分组信息。
        if (CollUtil.isEmpty(groupDOList)) {
            //CollUtil.isEmpty用于判断集合是否为空
            throw new ServiceException("该用户无短链接分组信息");
        }
        requestParam.setGidList(groupDOList.stream().map(GroupDO::getGid).toList());
        //提取出所有的gid
        return shortLinkActualRemoteService.pageRecycleBinShortlink(
                requestParam.getGidList(),
                requestParam.getCurrent(),
                //当前页码
                requestParam.getSize());
                //数据条数
    }
    //查询用户的短链接分组信息：根据当前用户的用户名和删除标志，查询该用户的短链接分组。
    //检查分组信息是否为空：如果没有找到用户的短链接分组，则抛出异常。
    //设置分页查询条件：将查询到的分组ID列表设置到请求参数中，用于后续查询回收站短链接。
    //调用远程服务查询回收站短链接：通过远程服务查询回收站中的短链接并分页返回结果。
    //返回查询结果：返回查询到的回收站短链接分页数据。
}
